#! user/bin/python
# -*- coding: utf-8 -*-

"""
Created on 2021/8/24 17:37

@File: 初步尝试用ftplib传输文件_getone.py
@Author: LT
@Description: 这个脚本进行了以下操作：
              1.从原虫FTP站点下载图像文件（使用默认设置）。
              2.
"""
import os, sys
from ftplib import FTP                  # 基于套接字的FTP工具
from getpass import getpass             # 隐藏密码输入

nonpassive = False                      # 是否强制服务器进入主动FTP模式？
filename = 'monkeys.jpg'                # 将要下载的文件
dirname = '.'                           # 将要抓取的远程目录
sitename = 'ftp.genome.jp'                # 将要连接的FTP站点
userinfo = ("lutz", getpass("Pswd?"))   # 与内置函数input一样，是提示并读取用户键入的一行文本；不同的是，getpass并不在屏幕上显示所键入的字符，但只能在shell模式下有效
print(userinfo)
if len(sys.argv) > 1:
    filename = sys.argv[1]

print('Connecting...')
connection = FTP(sitename)              # 连接到FTP站点
connection.login(*userinfo)             # 默认为匿名登录
connection.cwd(dirname)                 # 这个命令是每次将1k数据传送到本地

if nonpassive:                          # 如果为True，脚本将在主动FTP模式而非默认的被动模式下传输文件
    connection.set_pasv(False)

print('Downloading...')
localfile = open(filename, "wb")        # 用于存储下载内容的本地文件，媒体文件肯定得用二进制写入的
# retrbinary以二进制模式下载目标服务器文件。由于它必须下载一个大文件，所以retrbinary调用需要一段时间才能完成，它必须接收3个参数--->
connection.retrbinary("RETR " + filename,           # 一个FTP命令字符串。RETR是FTP抓取的标准格式
                      localfile.write,              # 一个函数或者方法，Python会向其传入下载文件的字节数据块
                      1024)
connection.quit()                       # 调用用FTP的quit方法切断与服务器的连接
localfile.close()                       # 并手动close关闭本地文件以保证完整性（因为close之前文件的某部分可能还保留在缓冲中）

